home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 21 / AMIGAplus Sonderheft 21 (1999)(ICP)(DE)[!].iso / PublicDomain / Anwendungen / uuepro / lowlevel.asm next >
Assembly Source File  |  1999-08-23  |  3KB  |  181 lines

  1. ; low level uuepro functions
  2.  
  3.     XDEF _checksum
  4.     XDEF _uuencode
  5.     XDEF _relspf
  6.  
  7.     XREF _SysBase
  8.     XREF _testbreak
  9.  
  10.     section    text,CODE
  11.  
  12. _checksum
  13.     movem.l    a0/d1/d2,-(sp)
  14.     clr.l    d1
  15. count    ror.w    #1,d0
  16.     move.b    (a0)+,d1
  17.     add.w    d1,d0
  18.     subq.l    #1,d2
  19.     bne.s    count
  20.     movem.l    (sp)+,a0/d1/d2
  21.     rts
  22.  
  23. chrp62    moveq    #62,d7
  24. chrp    move.w    d0,-(a5)
  25.     subq.l    #1,d0
  26.     dbf    d7,chrp
  27.     rts
  28.  
  29. _uuencode
  30.     movem.l    a0-a3/a5/d1-d7,-(sp)
  31.     move.l    _SysBase,a5
  32.     btst.b    #1,297(a5)    ;AttnFlags+1
  33.     sub.l    a5,a5
  34.     beq.s    .3
  35.     tst.w    utflag
  36.     bne.s    .2
  37.     lea    tablend,a5
  38.     move.w    #$5f5f,d0
  39.     moveq    #62,d3
  40. .1    bsr.s    chrp62
  41.     move.b    #$60,d0
  42.     clr.l    d7
  43.     bsr.s    chrp
  44.     sub.w    #$100,d0
  45.     dbf    d3,.1
  46.     move.w    #$605f,d0
  47.     bsr.s    chrp62
  48.     move.w    #$6060,-(a5)
  49.     addq.w    #1,utflag
  50. .2    lea    table,a5
  51.     moveq    #12,d3
  52.     move.w    #4095,d7
  53.     bra.s    .4
  54. .3    moveq    #6,d3
  55.     moveq    #14,d7
  56. .4    moveq    #$3F,d4
  57.     moveq    #$40,d5
  58.     moveq    #$20,d6
  59.     clr.l    d2
  60. enc    move.l    a3,d1
  61.     cmp.l    #45,d1
  62.     bls.s    .1
  63.     moveq    #45,d1
  64. .1    add.b    #32,d1
  65.     move.b    d1,(a1)+
  66.     sub.b    #33,d1
  67.     divu    #3,d1
  68.     move.l    a5,d0
  69.     bne.s    enc20
  70. enc00    move.b    (a0)+,d0
  71.     add.b    d0,d2
  72.     lsl.l    #8,d0
  73.     move.b    (a0)+,d0
  74.     add.b    d0,d2
  75.     lsl.l    #8,d0
  76.     move.b    (a0)+,d0
  77.     add.b    d0,d2
  78.     rol.l    d7,d0
  79.     and.b    d4,d0
  80.     bne.s    .1
  81.     add.b    d5,d0
  82. .1    add.b    d6,d0
  83.     move.b    d0,(a1)+
  84.     rol.l    d3,d0
  85.     and.b    d4,d0
  86.     bne.s    .2
  87.     add.b    d5,d0
  88. .2    add.b    d6,d0
  89.     move.b    d0,(a1)+
  90.     rol.l    d3,d0
  91.     and.b    d4,d0
  92.     bne.s    .3
  93.     add.b    d5,d0
  94. .3    add.b    d6,d0
  95.     move.b    d0,(a1)+
  96.     rol.l    d3,d0
  97.     and.b    d4,d0
  98.     bne.s    .4
  99.     add.b    d5,d0
  100. .4    add.b    d6,d0
  101.     move.b    d0,(a1)+
  102.     dbf    d1,enc00
  103.     move.l    a6,d0
  104.     beq.s    endc
  105.     bra.s    linesum
  106. enc20    tst.l    a6
  107.     beq.s    enc20ns
  108. enc20s    move.l    (a0),d0
  109.     rol.l    d3,d0
  110.     add.b    (a0)+,d2
  111.     and.w    d7,d0
  112.     move.w    (a5,d0.w*2),(a1)+
  113.     rol.l    d3,d0
  114.     add.b    (a0)+,d2
  115.     and.w    d7,d0
  116.     add.b    (a0)+,d2
  117.     move.w    (a5,d0.w*2),(a1)+
  118.     dbf    d1,enc20s
  119. linesum    and.b    d4,d2
  120.     bne.s    .1
  121.     add.b    d5,d2
  122. .1    add.b    d6,d2
  123.     move.b    d2,(a1)+
  124.     clr.l    d2
  125.     bra.s    endc
  126. enc20ns    move.l    (a0),d0
  127.     rol.l    d3,d0
  128.     addq.l    #3,a0
  129.     and.w    d7,d0
  130.     move.w    (a5,d0.w*2),(a1)+
  131.     rol.l    d3,d0
  132.     and.w    d7,d0
  133.     move.w    (a5,d0.w*2),(a1)+
  134.     dbf    d1,enc20ns
  135. endc    move.b    #10,(a1)+
  136.     sub.w    #45,a3
  137.     subq.l    #1,a2
  138.     move.l    a3,d0
  139.     ble.s    .3
  140.     move.l    a2,d0
  141.     ble.s    .3
  142.     and.l    d4,d0
  143.     bne    enc
  144.     movem.l    a0-a1,-(sp)
  145.     jsr    _testbreak
  146.     movem.l    (sp)+,a0-a1
  147.     tst.l    d0
  148.     beq    enc
  149. .3    move.l    a1,d0
  150.     movem.l    (sp)+,a0-a3/a5/d1-d7
  151.     rts
  152.  
  153. _relspf    movem.l a2/a3/a6,-(sp)
  154.     move.l    4*4(sp),a6
  155.     move.l    (a6),a3
  156.     move.l    5*4(sp),a0
  157.     lea.l    6*4(sp),a1
  158.     lea.l    nc(pc),a2
  159.     move.l    _SysBase,a6
  160.     jsr    -522(a6)    ;RawDoFmt()
  161. .1    tst.b    (a3)+
  162.     bne.s    .1
  163.     subq.l    #1,a3
  164.     move.l    4*4(sp),a6
  165.     move.l    a3,(a6)
  166.     movem.l (sp)+,a2/a3/a6
  167.     rts
  168. nc    move.b    d0,(a3)+
  169.     rts
  170.  
  171.     section    __MERGED,DATA
  172.  
  173. utflag    ds.w    1
  174.  
  175.     section qq,bss
  176.  
  177. table    ds.w    4096
  178. tablend
  179.  
  180.     end
  181.